HAL FDCAN IRQ Handler and Callbacks Functions Migration

This section provides information about the HAL FDCAN IRQ_Handler and Callbacks functions migration.

Note

The interrupt handling and callback for FDCAN clock calibration has been significantly redesigned from HAL1 to HAL2:

  • Clock calibration callback:

    • In HAL1, clock calibration events were managed through a single callback, HAL_FDCAN_ClockCalibrationCallback(), triggered by the main interrupt handler with flags indicating calibration state changes or watchdog events.

    • In HAL2, this callback is split into two distinct functions:

      HAL_FDCAN_CCU_CalibrationCallback() provides detailed calibration levels upon state changes.

      HAL_FDCAN_CCU_CalibrationWatchdogCallback() handles watchdog expiration events indicating calibration failure.

  • IRQ Handler:

    • In HAL1, a single interrupt handler, HAL_FDCAN_IRQHandler(), manages all FDCAN interrupts on two interrupt lines ( fdcan_intr0_it and fdcan_intr1_it) and calibration interrupt fdcan_cal_it.

    • In HAL2, interrupt handling is separated by interrupt lines:

      HAL_FDCAN_IRQHandler() manages interrupts on two interrupt lines.

      HAL_FDCAN_CCU_IRQHandler() is dedicated to handling interrupts on the clock calibration unit interrupt line.

Refer to Use case: Clock calibration (interrupt)

HAL FDCAN callbacks functions

HAL1

HAL2

HAL_FDCAN_ClockCalibrationCallback(&hfdcan, FDCAN_IT_CALIB_STATE_CHANGED)
HAL_FDCAN_ClockCalibrationCallback(&hfdcan, FDCAN_IT_CALIB_WATCHDOG_EVENT)
HAL_FDCAN_CCU_CalibrationCallback(&hfdcan, HAL_FDCAN_CCU_CAL_LEVEL_BASIC_CALIBRATED)
HAL_FDCAN_CCU_CalibrationWatchdogCallback(&hfdcan)

HAL_FDCAN_ErrorCallback(FDCAN_HandleTypeDef *hfdcan)

HAL_FDCAN_ErrorCallback(hal_fdcan_handle_t *hfdcan)

HAL_FDCAN_HighPriorityMessageCallback(FDCAN_HandleTypeDef *hfdcan)

HAL_FDCAN_HighPriorityMessageCallback(hal_fdcan_handle_t *hfdcan)

HAL_FDCAN_RxBufferNewMessageCallback(FDCAN_HandleTypeDef *hfdcan)

HAL_FDCAN_RxBufferNewMessageCallback(hal_fdcan_handle_t *hfdcan, uint64_t rx_buffers_idx)

HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)

HAL_FDCAN_RxFifo0Callback(hal_fdcan_handle_t *hfdcan, uint32_t rx_fifo0_interrupts)

HAL_FDCAN_RxFifo1Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo1ITs)

HAL_FDCAN_RxFifo1Callback(hal_fdcan_handle_t *hfdcan, uint32_t rx_fifo1_interrupts)

HAL_FDCAN_TimestampWraparoundCallback(FDCAN_HandleTypeDef *hfdcan)

HAL_FDCAN_TimestampWraparoundCallback(hal_fdcan_handle_t *hfdcan)

HAL_FDCAN_TxBufferAbortCallback(FDCAN_HandleTypeDef *hfdcan, uint32_t BufferIndexes)

HAL_FDCAN_TxBufferAbortCallback(hal_fdcan_handle_t *hfdcan, uint32_t tx_buffers_idx)

HAL_FDCAN_TxBufferCompleteCallback(FDCAN_HandleTypeDef *hfdcan, uint32_t BufferIndexes)

HAL_FDCAN_TxBufferCompleteCallback(hal_fdcan_handle_t *hfdcan, uint32_t tx_buffers_idx)

HAL_FDCAN_TxEventFifoCallback(FDCAN_HandleTypeDef *hfdcan, uint32_t TxEventFifoITs)

HAL_FDCAN_TxEventFifoCallback(hal_fdcan_handle_t *hfdcan, uint32_t tx_event_fifo_interrupts)

HAL_FDCAN_TxFifoEmptyCallback(FDCAN_HandleTypeDef *hfdcan)

HAL_FDCAN_TxFifoEmptyCallback(hal_fdcan_handle_t *hfdcan)

HAL_FDCAN_ErrorStatusCallback(FDCAN_HandleTypeDef *hfdcan, uint32_t ErrorStatusITs)

Removed: use instead HAL_FDCAN_ErrorCallback().

HAL_FDCAN_TimeoutOccurredCallback(FDCAN_HandleTypeDef *hfdcan)

Removed: use instead HAL_FDCAN_ErrorCallback().

HAL_FDCAN_TT_GlobalTimeCallback(FDCAN_HandleTypeDef *hfdcan, uint32_t TTGlobTimeITs)

Removed: TTCAN not supported in HAL2

HAL_FDCAN_TT_ScheduleSyncCallback(FDCAN_HandleTypeDef *hfdcan, uint32_t TTSchedSyncITs)

Removed: TTCAN not supported in HAL2

HAL_FDCAN_TT_StopWatchCallback(FDCAN_HandleTypeDef *hfdcan, uint32_t SWTime, uint32_t SWCycleCount)

Removed: TTCAN not supported in HAL2

HAL_FDCAN_TT_TimeMarkCallback(FDCAN_HandleTypeDef *hfdcan, uint32_t TTTimeMarkITs)

Removed: TTCAN not supported in HAL2


HAL FDCAN register callbacks functions

HAL1

HAL2

In HAL1, the function HAL_FDCAN_RegisterCallback is used to register CORDIC callbacks using a single function with a specific callback ID.

In HAL2, separate functions are available to register each specific CORDIC callback, providing more granularity and control over the callback registration process.

HAL_FDCAN_RegisterCallback(&fdcan_handle,
                            HAL_FDCAN_TX_FIFO_EMPTY_CB_ID,
                            USER_FDCAN_TxFifoEmptyCallback)

HAL_FDCAN_RegisterCallback(&fdcan_handle,
                            HAL_FDCAN_RX_BUFFER_NEW_MSG_CB_ID,
                            USER_FDCAN_RxBufferNewMessageCallback)

HAL_FDCAN_RegisterCallback(&fdcan_handle,
                            HAL_FDCAN_HIGH_PRIO_MESSAGE_CB_ID,
                            USER_FDCAN_HighPriorityMessageCallback)

HAL_FDCAN_RegisterCallback(&fdcan_handle,
                            HAL_FDCAN_TIMESTAMP_WRAPAROUND_CB_ID,
                            FDCAN_TimestampWraparoundCallback)

HAL_FDCAN_RegisterCallback(&fdcan_handle,
                            HAL_FDCAN_ERROR_CALLBACK_CB_ID,
                            USER_FDCAN_ErrorCallback)

HAL_FDCAN_RegisterCallback(&fdcan_handle,
                            HAL_FDCAN_TIMEOUT_OCCURRED_CB_ID,
                            USER_FDCAN_TimeoutOccurred_Callback)


HAL_FDCAN_RegisterCallback(&fdcan_handle,
                            HAL_FDCAN_MSPINIT_CB_ID,
                            FDCAN_MSPInitCallback)

HAL_FDCAN_RegisterCallback(&fdcan_handle,
                            HAL_FDCAN_MSPDEINIT_CB_ID,
                            FDCAN_MSPDeinitCallback)
HAL_FDCAN_RegisterTxFifoEmptyCallback(&fdcan_handle, USER_FDCAN_TxFifoEmptyCallback)



HAL_FDCAN_RegisterRxBufferNewMessageCallback(&fdcan_handle, USER_FDCAN_RxBufferNewMessageCallback)



HAL_FDCAN_RegisterHighPriorityMessageCallback(&fdcan_handle, USER_FDCAN_HighPriorityMessageCallback)



HAL_FDCAN_RegisterTimestampWraparoundCallback(&fdcan_handle, USER_FDCAN_TimestampWraparoundCallback)



HAL_FDCAN_RegisterErrorCallback(&fdcan_handle, USER_FDCAN_FDCAN_ErrorCallback)



Removed as HAL_FDCAN_TimeoutOccurredCallback is no longer supported.




Removed because the functions HAL_FDCAN_MspInit() and HAL_FDCAN_MspDeInit() are removed.

HAL_FDCAN_RegisterClockCalibrationCallback(FDCAN_HandleTypeDef *hfdcan,pFDCAN_ClockCalibrationCallbackTypeDef pCallback)

HAL_FDCAN_CCU_RegisterCalibrationCallback() and HAL_FDCAN_CCU_RegisterCalibrationWatchdogCallback()

HAL_FDCAN_RegisterRxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, pFDCAN_RxFifo0CallbackTypeDef pCallback)

HAL_FDCAN_RegisterRxFifo0Callback(hal_fdcan_handle_t *hfdcan, hal_fdcan_fifo_cb_t p_callback)

HAL_FDCAN_RegisterRxFifo1Callback(FDCAN_HandleTypeDef *hfdcan, pFDCAN_RxFifo1CallbackTypeDef pCallback)

HAL_FDCAN_RegisterRxFifo1Callback(hal_fdcan_handle_t *hfdcan, hal_fdcan_fifo_cb_t p_callback)

HAL_FDCAN_RegisterTxBufferAbortCallback(FDCAN_HandleTypeDef *hfdcan, pFDCAN_TxBufferAbortCallbackTypeDef pCallback)

HAL_FDCAN_RegisterTxBufferAbortCallback(hal_fdcan_handle_t *hfdcan, hal_fdcan_tx_buffer_cb_t p_callback)

HAL_FDCAN_RegisterTxBufferCompleteCallback(FDCAN_HandleTypeDef *hfdcan, pFDCAN_TxBufferCompleteCallbackTypeDef pCallback)

HAL_FDCAN_RegisterTxBufferCompleteCallback(hal_fdcan_handle_t *hfdcan, hal_fdcan_tx_buffer_cb_t p_callback)

HAL_FDCAN_RegisterTxEventFifoCallback(FDCAN_HandleTypeDef *hfdcan, pFDCAN_TxEventFifoCallbackTypeDef pCallback)

HAL_FDCAN_RegisterTxEventFifoCallback(hal_fdcan_handle_t *hfdcan, hal_fdcan_fifo_cb_t p_callback)

HAL_FDCAN_RegisterErrorStatusCallback(FDCAN_HandleTypeDef *hfdcan, pFDCAN_ErrorStatusCallbackTypeDef pCallback)

Removed as HAL_FDCAN_ErrorStatusCallback is no longer available.

HAL_FDCAN_RegisterTTGlobalTimeCallback(FDCAN_HandleTypeDef *hfdcan, pFDCAN_TT_GlobalTimeCallbackTypeDef pCallback)

Removed: TTCAN not supported in HAL2

HAL_FDCAN_RegisterTTScheduleSyncCallback(FDCAN_HandleTypeDef *hfdcan, pFDCAN_TT_ScheduleSyncCallbackTypeDef pCallback)

Removed: TTCAN not supported in HAL2

HAL_FDCAN_RegisterTTStopWatchCallback(FDCAN_HandleTypeDef *hfdcan, pFDCAN_TT_StopWatchCallbackTypeDef pCallback)

Removed: TTCAN not supported in HAL2

HAL_FDCAN_RegisterTTTimeMarkCallback(FDCAN_HandleTypeDef *hfdcan, pFDCAN_TT_TimeMarkCallbackTypeDef pCallback)

Removed: TTCAN not supported in HAL2


HAL FDCAN unregister callbacks.

HAL1

HAL2

HAL_FDCAN_UnRegisterCallback(&fdcan_handle,
                              HAL_FDCAN_TX_FIFO_EMPTY_CB_ID)

HAL_FDCAN_UnRegisterCallback(&fdcan_handle,
                              HAL_FDCAN_RX_BUFFER_NEW_MSG_CB_ID)

HAL_FDCAN_UnRegisterCallback(&fdcan_handle,
                              HAL_FDCAN_HIGH_PRIO_MESSAGE_CB_ID)

HAL_FDCAN_UnRegisterCallback(&fdcan_handle,
                              HAL_FDCAN_TIMESTAMP_WRAPAROUND_CB_ID)

HAL_FDCAN_UnRegisterCallback(&fdcan_handle,
                              HAL_FDCAN_ERROR_CALLBACK_CB_ID)

HAL_FDCAN_UnRegisterCallback(&fdcan_handle,
                              HAL_FDCAN_TIMEOUT_OCCURRED_CB_ID)

HAL_FDCAN_UnRegisterCallback(&fdcan_handle,
                              HAL_FDCAN_MSPINIT_CB_ID)

HAL_FDCAN_UnRegisterCallback(&fdcan_handle,
                              HAL_FDCAN_MSPDEINIT_CB_ID)
HAL_FDCAN_RegisterTxFifoEmptyCallback(&fdcan_handle, HAL_FDCAN_TxFifoEmptyCallback)


HAL_FDCAN_RegisterRxBufferNewMessageCallback(&fdcan_handle, HAL_FDCAN_RxBufferNewMessageCallback)


HAL_FDCAN_RegisterHighPriorityMessageCallback(&fdcan_handle, HAL_FDCAN_HighPriorityMessageCallback)


HAL_FDCAN_RegisterTimestampWraparoundCallback(&fdcan_handle, HAL_FDCAN_TimestampWraparoundCallback)


HAL_FDCAN_RegisterErrorCallback(&fdcan_handle, HAL_FDCAN_ErrorCallback)


Removed as HAL_FDCAN_TimeoutOccurredCallback is no longer supported.


Removed because the functions HAL_FDCAN_MspInit() and HAL_FDCAN_MspDeInit() are removed.

HAL_FDCAN_UnRegisterClockCalibrationCallback(&fdcan_handle)

HAL_FDCAN_CCU_RegisterCalibrationCallback(&fdcan_handle, User_ClockCalibrationCallback) and HAL_FDCAN_CCU_RegisterCalibrationWatchdogCallback(&fdcan_handle, User_ClockCalibrationWatchdogCallback).

HAL_FDCAN_UnRegisterRxFifo0Callback(&fdcan_handle)

HAL_FDCAN_RegisterRxFifo0Callback(&fdcan_handle, HAL_FDCAN_RxFifo0Callback)

HAL_FDCAN_UnRegisterRxFifo1Callback(&fdcan_handle)

HAL_FDCAN_RegisterRxFifo1Callback(&fdcan_handle, HAL_FDCAN_RxFifo1Callback)

HAL_FDCAN_UnRegisterTxBufferAbortCallback(&fdcan_handle)

HAL_FDCAN_RegisterTxBufferAbortCallback(&fdcan_handle, HAL_FDCAN_TxBufferAbortCallback)

HAL_FDCAN_UnRegisterTxBufferCompleteCallback(&fdcan_handle)

HAL_FDCAN_RegisterTxBufferCompleteCallback(&fdcan_handle, HAL_FDCAN_TxBufferCompleteCallback)

HAL_FDCAN_UnRegisterTxEventFifoCallback(&fdcan_handle)

HAL_FDCAN_RegisterTxEventFifoCallback(&fdcan_handle, HAL_FDCAN_TxEventFifoCallback)

HAL_FDCAN_UnRegisterErrorStatusCallback(FDCAN_HandleTypeDef *hfdcan)

Removed as HAL_FDCAN_ErrorStatusCallback is no longer supported.

HAL_FDCAN_UnRegisterTTGlobalTimeCallback(FDCAN_HandleTypeDef *hfdcan)

Removed: TTCAN not supported in HAL2

HAL_FDCAN_UnRegisterTTScheduleSyncCallback(FDCAN_HandleTypeDef *hfdcan)

Removed: TTCAN not supported in HAL2

HAL_FDCAN_UnRegisterTTStopWatchCallback(FDCAN_HandleTypeDef *hfdcan)

Removed: TTCAN not supported in HAL2

HAL_FDCAN_UnRegisterTTTimeMarkCallback(FDCAN_HandleTypeDef *hfdcan)

Removed: TTCAN not supported in HAL2


HAL FDCAN callback pointers.

In HAL2, HAL1 separate callback pointers for RX FIFO0, RX FIFO1, and TX Event FIFO are unified into hal_fdcan_fifo_cb_t, and transmit buffer abort and complete callbacks are merged into hal_fdcan_tx_buffer_cb_t, simplifying and standardizing the interface.

HAL1

HAL2

pFDCAN_CallbackTypeDef()

hal_fdcan_cb_t()

pFDCAN_ClockCalibrationCallbackTypeDef()

hal_fdcan_ccu_calibration_cb_t()

pFDCAN_RxFifo0CallbackTypeDef()

No specific pointer type for FIFO0 in HAL2; use hal_fdcan_fifo_cb_t() instead.

pFDCAN_RxFifo1CallbackTypeDef()

No specific pointer type for FIFO1 in HAL2; use hal_fdcan_fifo_cb_t() instead.

pFDCAN_TxEventFifoCallbackTypeDef()

No specific pointer type for Tx Event FIFO in HAL2; use hal_fdcan_fifo_cb_t() instead.

pFDCAN_TxBufferAbortCallbackTypeDef()

No specific pointer type for Tx Buffer Abort in HAL2; use hal_fdcan_tx_buffer_cb_t() instead.

pFDCAN_TxBufferCompleteCallbackTypeDef()

No specific pointer type for Tx Buffer Complete in HAL2; use hal_fdcan_tx_buffer_cb_t() instead.

pFDCAN_ErrorStatusCallbackTypeDef()

Removed as HAL_FDCAN_ErrorStatusCallback is no longer supported.

pFDCAN_TT_GlobalTimeCallbackTypeDef()

Removed: TTCAN not supported in HAL2

pFDCAN_TT_ScheduleSyncCallbackTypeDef()

Removed: TTCAN not supported in HAL2

pFDCAN_TT_StopWatchCallbackTypeDef()

Removed: TTCAN not supported in HAL2

pFDCAN_TT_TimeMarkCallbackTypeDef()

Removed: TTCAN not supported in HAL2


HAL FDCAN IRQ handler function.

HAL1

HAL2

HAL_FDCAN_IRQHandler(FDCAN_HandleTypeDef *hfdcan)
/* for  interrupt line0 and line1 */
 HAL_FDCAN_IRQHandler(hal_fdcan_handle_t *hfdcan)
 /* for  fdcan calibration interrupts */
 HAL_FDCAN_CCU_IRQHandler(hal_fdcan_handle_t *hfdcan)